- Статьи
- 2018-12-23
Автор статьи: Mort3m
Вообще, сама задумка статьи с зм сру, но так как это мертвый сайт, кого это волнует?
В данной статье я вам расскажу как можно добавить собственные ( кастомные ) модели игрокам.
Многие делают эти самые модели через мод, как по мне, легче сделать так, как я опишу в этом гайде.
И так, для начала нам нужен Zombie Plague Fix5a. Потому что в этом фиксе есть натив на установку кастомной модели.
Если данного фикса у вас на моде нету, берём обычный Zombie Plague.
ВНИМАНИЕ! Следующий блок статьи пойдет о том, как добавить натив на установку кастомной модели. Т.е для тех, у кого нет Fix5a.
Приступим.
1. Открываем исходник мода.
2. Ищем строку
public plugin_natives()
3. Ищем свободное место для добавления натива. Либо место, куда вы бы хотели поместить сам натив.
Лично я это буду делать после натива zp_force_buy_extra_item
Добавляем строку:
register_native("zp_override_user_model", "native_override_user_model", 1);
Должно получиться так:

Спускаемся до строки:
/*================================================================================
[Custom Natives]
=================================================================================*/
И в любом удобном месте вставляем этот блок кода:
// Native: zp_override_user_model
public native_override_user_model(id, const newmodel[], modelindex)
{
// ZP disabled
if (!g_pluginenabled)
return false;
if (!is_user_valid_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
// Strings passed byref
param_convert(2)
// Remove previous tasks
remove_task(id+TASK_MODEL)
// Custom models stuff
static currentmodel[32]
if (g_handle_models_on_separate_ent)
{
// Set the right model
copy(g_playermodel[id], charsmax(g_playermodel[]), newmodel)
if (g_set_modelindex_offset && modelindex) fm_cs_set_user_model_index(id, modelindex)
// Set model on player model entity
fm_set_playermodel_ent(id)
}
else
{
// Get current model for comparing it with the current one
fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))
// Set the right model, after checking that we don't already have it
if (!equal(currentmodel, newmodel))
{
copy(g_playermodel[id], charsmax(g_playermodel[]), newmodel)
if (g_set_modelindex_offset && modelindex) fm_cs_set_user_model_index(id, modelindex)
// An additional delay is offset at round start
// since SVC_BAD is more likely to be triggered there
if (g_newround)
set_task(5.0 * g_modelchange_delay, "fm_user_model_update", id+TASK_MODEL)
else
fm_user_model_update(id+TASK_MODEL)
}
}
return true;
}
Должно получиться так: ( Шрифт уменьшил чтобы код влез полностью )

Если вы всё сделали правильно, компиляция должна пройти успешно:

ВНИМАНИЕ! Следующий блок статьи пойдет для всех пользователей, имеющих как обычный Zombie Plague так и Fix5a.
Итак, перейдем к основному.
Теперь нам надо будет написать маленький плагин, добавляющий вашу модель игрокам. Сам плагин я выложу в этой статье.
1. Создаём файл формата .sma с любым угодным вам названием
2. Заходим в файл любым текстовым редактором.
3. Подключаем инклуды + Оффсеты.
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
// Оффсеты
#define linux_diff_player 5
#define m_modelIndexPlayer 491
4. Вписываем натив + некоторые макросы + создаём переменную.
Важно! ПАПКА С МОДЕЛЬЮ И САМА МОДЕЛЬ ДОЛЖНЫ БЫТЬ С ОДИНАКОВЫМИ НАЗВАНИЯМИ
// Сам натив
native zp_override_user_model(pPlayer, szModel[], iModelIndex = 0);
#define MODEL_NAME "tommy" // Название модели
#define MODEL_PATH "models/player/%s/%s.mdl" // Оригинальный путь до моделей.
#define MODEL_ACCESS_ADMIN ADMIN_BAN // Установка модели только Админу. Закомментируйте, если не нужно
// Создаём переменную для хранения в ней индекса модели
new g_iszModelIndex;
5. Теперь нам надо вписать два форварда. plugin_precache и plugin_init
И в них зарегистрировать нужное нам событие и регистрацию плагина ( по желанию )
// Прекеш модели
public plugin_precache()
{
static szModelPath[128];
formatex(szModelPath, charsmax(szModelPath), MODEL_PATH, MODEL_NAME, MODEL_NAME);
// Присваиваем индекс модели переменной
g_iszModelIndex = engfunc(EngFunc_PrecacheModel, szModelPath);
}
// Регистрация нужных нам событий ( register_plugin по желанию )
public plugin_init()
{
// Регистрируем плагин
register_plugin("[AMXX] Custom Model", "0.0.1", "m0rt3m/тут может быть ваш ник");
// Ловим эвент спавна игрока
RegisterHam(Ham_Spawn, "player", "HamHook__PlayerSpawn_Post", 1);
}
6. Теперь нам осталось создать публичную функцию и вписать форвард когда игрок превращается в человека.
public HamHook__PlayerSpawn_Post(iPlayer)
{
// Проверяем на коннект
if(!is_user_connected(iPlayer))
return;
// Проверяем на зомби и выжившего
if(zp_get_user_zombie(iPlayer) || zp_get_user_survivor(iPlayer))
return;
// Проверяем на наличие флага, если макрос не закомментирован
#if defined MODEL_ACCESS_ADMIN
if(~get_user_flags(iPlayer) & MODEL_ACCESS_ADMIN)
return;
#endif
// Выставляем модель
zp_override_user_model(iPlayer, MODEL_NAME, g_iszModelIndex);
// Выставляем нужный индекс модели, чтобы не слетал
set_pdata_int(iPlayer, m_modelIndexPlayer, g_iszModelIndex, linux_diff_player);
}
public zp_user_humanized_post(iPlayer, iSurvivor)
{
// Проверяем на выжившего
if(iSurvivor)
return;
// Проверяем на наличие флага, если макрос не закомментирован
#if defined MODEL_ACCESS_ADMIN
if(~get_user_flags(iPlayer) & MODEL_ACCESS_ADMIN)
return;
#endif
// Выставляем модель
zp_override_user_model(iPlayer, MODEL_NAME, g_iszModelIndex);
// Выставляем нужный индекс модели, чтобы не слетал
set_pdata_int(iPlayer, m_modelIndexPlayer, g_iszModelIndex, linux_diff_player);
}
Плагин можно довести до ума, и сделать выставление моделей по ини и т.д, собственно, если вы шарите в павне, для вас это не будет особой проблемой.
Пожертвовать Вы можете сделать автору Mort3m, подарок в виде пожертвования на его электронную копилку ;)
30%
Скидка на покупку всех
сборок до 30.12.2025
Специально для тебя - Гость

Выбрать сборку

Готовый сервер Zombie Plague 4.3 By Mazik102
че зашляпа я не могу скачать

CS1.6 VIPClient TOP
Кому надо хорошая кс 1.6 можно скачать https://vipclientcs.com/download/cs1.6_vipcient.exe

GameCMS 3.619 (Nulled by OverGame)
Пишет неверный токен это что?

GameCMS АБСОЛЮТНО СО ВСЕМИ МОДУЛЯМИ
Спасибо вам огромное за такой материал. Низкий вам поклон. Всё работает как часики

CYBERSPORT CS 1.6
А как скачать ссылки нет
Данные для Связи.https://vk.com/id344641190 https://t.me/SysTemmmmmm Discord: Wizard#2169Услуга Помощь в установке/настройке серверов/модов/плагинов/сайтов.
GameCMS (Game Content Management System) Данные для Связи. https://vk.com/id344641190 https://t.me/SysTemmmmmm Discord: Wizard#2169
Исправили Почту всех приходит, Очистили базу от кометов, Мусорных файлов, Дальше будем работать по файлам.
ReHLDS (Reverse-engineered) - это новый шаг вперед, который дает второе дыхание нашим серверам. ReHLDS работает в 2 раза быстрей, чем HLDS.
AMXModX - это Metamod дополнение, которое позволяет создавать новые модификации для Half-Life на языке Pawn
Reunion является продолжением Dproto для ReHLDS. Это metamod плагин, который позволяет заходить 47/48 Non-Steam на сервер.
Revoice - это Metamod plugin, который дает возможность общения голосовым чатом между non-steam и steam клиентами.
Новый Metamod-r содержит огромное количество оптимизаций производительности и намного более чистый код. Ядро было написано с использованием JIT-компилятора.
Ultimate Unprecacher являет плагином для MetaMod, работает он по принципу отключение не нужных ресурсов на вашем сервере, тем самым вы сможете освободить места для ресурсов под ваши плагины, с помощью данного модуля можно избавиться от ошибки 512!
ReAuthCheck - это Metamod плагин, который занимается проверкой ваших игроков на валидность, с помощью данного модуля для REHLDS вы сможете защитить свой сервер от ботов, которые постоянно спамят рекламу или просто забивают слот на сервере!
NetBufExtender или NBEX - это метамод-плагин, который расширяет "интернет-буфер": буферы сервера и клиента(гарантия не 100%). Расширяет до 64 кб. Это значит, что у игроков уменьшается вероятность быть кикнутыми с ошибкой "Reliable channel overflowed".
UINO — metamod-плагин, который позволяет удалять ненужные поля из userinfo(setinfo) когда движок передаёт его другим игрокам на сервере. Данная мера уменьшает объём передаваемых данных и немного сокращает шанс быть кикнутым с "Reliable channel overflowed".